There are many types of computing systems, ranging from simple standalone devices to complex distributed networks, each of which includes one or more components configured to perform specialized processing on data objects being handled by the computing systems. For instance, some components are configured to detect and/or generate data signals. Others are configured to update and/or render visualizations associated with the data objects. Yet others are configured to perform a variety of different computing processes.
Some components generate records of the processes they perform, including the handling of the arrival and/or departure of the data objects they process. These records can be sent to a centralized system to reflect the flow and overall processing performed on an object. These records, which are sometimes referred to as log records, can be particularly helpful when an object is processed by a variety of different components in a complex transaction. For instance, when a transaction fails, it can be helpful to have a record of all transaction processing that was performed to identify which of the system components failed. Likewise, it can be helpful to examine a transaction log to analyze the flow of data objects through various system components in a distributed processing system in order to identify bottlenecks and other inefficiencies in the system.
To generate a log record, a component must first be instrumented with code that instructs the component how and when to generate the log record. A component that is configured to generate log records is referred to herein as an instrumented component and/or a logging component.
It will be noted, however, that some components are incapable of generating log records. For instance, many components cannot, or cannot easily, be instrumented with the logic to perform the registrations required for generating the log records. For example, the instrumentation library might be written in C and rely on the ability to open a network connection to the central logging facility, but a database might not be able to host arbitrary C code and/or user functions might not be allowed to open the network connections required to connect with the central logging facility. If a component is incapable of generating and/or registering a log record, it is referred to herein as a non-instrumented component and/or a non-logging component.
In networks that include instrumented and non-instrumented components, the consolidated log maintained by the central logging facility will only include log entries originating from the instrumented components. This is a problem because an incomplete log cannot provide a view into the entire transaction that is performed on an object, thereby making it difficult or impossible to examine and identify the flow, inefficiencies and problems that may have transpired in the transaction.
For at least the foregoing reasons, there is an ongoing need to provide improved techniques and systems for logging transaction processing in heterogeneous networks that include a combination of instrumented and non-instrumented components. That said, the subject matter claimed herein is not limited to any specific embodiments that are determined to solve any particular disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one exemplary technology area where some embodiments described herein may be practiced.